package com.lifeibiao.作业0214;

public class TestCompany {
    public static void main(String[] args) {
        // 定义个员工数组
        ColaEmployee[] arrEmps = new ColaEmployee[3];
        // 创建员工加入数组
        // 此处使用了多态:使用父类类型指代子类
        /*
            = 左边的类型是父类类型 ColaEmployee
            = 右边new创建的实例对象是 父类ColaEmployee子类的实例对象
          */
        arrEmps[0] = new SalariedEmployee("张三",2,12000);
        arrEmps[1] = new HourlyEmployee("李四",1,80,180);
        arrEmps[2] = new SalesEmployee("王五",3,500000,0.03);
        // 打印员工2月份的工资
        // 创建Company类的一个实例对象
        Company company = new Company();
        // 遍历员工列表，打印所有员工2月份的工资
        // 设置打印的月份
        company.setCaculateMouth(2);
        for (int i = 0; i < arrEmps.length; i++) {
            // 设置打印员工工资类的属性的值
            // 打印的员工
            company.setColaEmployee(arrEmps[i]);
            // 打印员工工资
            company.printEmployeeSalary();
        }

        System.out.println("--------------------------------------");
        // 创建Company类的一个实例对象
        Company2 company2 = new Company2();
        // 遍历员工列表，打印所有员工2月份的工资
        for (int i = 0; i < arrEmps.length; i++) {
            // 打印员工工资
            company2.printEmployeeSalary(2,arrEmps[i]);
        }

        // 此处和作业无关，主要讲解多态的一种使用形式
        System.out.println("----------------打印单独的某个员工工资----------------");
        // 新建一个员工对象
        SalesEmployee seZhaoliu = new SalesEmployee("赵六",6,350000,0.03);
        // 打印该员工的工资信息
        // 此处使用了多态:使用父类类型指代子类
        /*
            printEmployeeSalary方法调用时传递的参数（形参）是 子类类型
            printEmployeeSalary方法的实参是父类类型
            在方法调用时，将子类型的参数（形参）的值
            传递给了父类类型的方法定义的参数（实参）
          */
        company2.printEmployeeSalary(2,seZhaoliu);
    }

}
